package com.sacfa.commons.bo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import org.apache.log4j.Logger;

import com.sacfa.commons.beans.Opcion;
import com.sacfa.commons.connection.PoolConexion;
import com.sacfa.commons.sql.TipoTelefonoSQL;
import com.sacfa.commons.utilities.SACFAExceptions;

public class TipoTelefonoBo {
private static Logger log = Logger.getLogger(TipoTelefonoBo.class);
	
	public void registrar(Opcion tipoTelefono){
		PreparedStatement stm = null;
		Connection conex = PoolConexion.getInstance().getConexion();
		
		try {
			PoolConexion.getInstance().beginTransaction(conex);
			
			stm = conex.prepareStatement(TipoTelefonoSQL.INSERT);
			stm.setString(1, tipoTelefono.getDescripcion());
			stm.executeUpdate();
			
			PoolConexion.getInstance().commit(conex);
			PoolConexion.getInstance().endTransaction(conex);
		} catch(SQLException ex) {
			log.info("Error SQL", ex);
			throw new SACFAExceptions("Error SQL", ex);
		} finally {
			PoolConexion.getInstance().endConection(conex);
		}
	}

	public Opcion consultar(Opcion tipoTelefono){
		PreparedStatement stm = null;
		ResultSet rs = null;
		Connection conex = PoolConexion.getInstance().getConexion();
		
		try {
			stm = conex.prepareStatement(TipoTelefonoSQL.SELECT_ONE);
			stm.setInt(1, tipoTelefono.getId());
			rs = stm.executeQuery();
			
			rs.next();
			tipoTelefono.setId(rs.getInt(1));
			tipoTelefono.setDescripcion(rs.getString(2));
		} catch(SQLException ex) {
			log.info("Error SQL", ex);
			throw new SACFAExceptions("Error SQL", ex);
		} finally {
			PoolConexion.getInstance().endConection(conex);
		}
		return tipoTelefono;
	}
	
	public Collection<Opcion> consultaGeneral(){
		Collection<Opcion> tipoTelefonos = new ArrayList<Opcion>();
		Opcion tipoTelefono = null;
		PreparedStatement stm = null;
		ResultSet rs = null;
		Connection conex = PoolConexion.getInstance().getConexion();
		
		try {
			stm = conex.prepareStatement(TipoTelefonoSQL.SELECT_ALL);
			rs = stm.executeQuery();
			
			while(rs.next()){
				tipoTelefono = new Opcion();
				tipoTelefono.setId(rs.getInt(1));
				tipoTelefono.setDescripcion(rs.getString(2));
				tipoTelefonos.add(tipoTelefono);
			}
		} catch(SQLException ex) {
			log.info("Error SQL", ex);
			throw new SACFAExceptions("Error SQL", ex);
		} finally {
			PoolConexion.getInstance().endConection(conex);
		}
		return tipoTelefonos;
	}
	
	public void modificar(Opcion tipoTelefono){
		PreparedStatement stm = null;
		Connection conex = PoolConexion.getInstance().getConexion();
		
		try {
			PoolConexion.getInstance().beginTransaction(conex);
			
			stm = conex.prepareStatement(TipoTelefonoSQL.UPDATE);
			stm.setString(1, tipoTelefono.getDescripcion());
			stm.setInt(2, tipoTelefono.getId());
			stm.executeUpdate();
			
			PoolConexion.getInstance().commit(conex);
			PoolConexion.getInstance().endTransaction(conex);
		} catch(SQLException ex) {
			log.info("Error SQL", ex);
			throw new SACFAExceptions("Error SQL", ex);
		} finally {
			PoolConexion.getInstance().endConection(conex);
		}
	}
	
	public void eliminar(Opcion tipoTelefono){
		PreparedStatement stm = null;
		Connection conex = PoolConexion.getInstance().getConexion();
		
		try {
			PoolConexion.getInstance().beginTransaction(conex);
			
			stm = conex.prepareStatement(TipoTelefonoSQL.DELETE);
			stm.setInt(1, tipoTelefono.getId());
			stm.executeUpdate();
			
			PoolConexion.getInstance().commit(conex);
			PoolConexion.getInstance().endTransaction(conex);
		} catch(SQLException ex) {
			log.info("Error SQL", ex);
			throw new SACFAExceptions("Error SQL", ex);
		} finally {
			PoolConexion.getInstance().endConection(conex);
		}
	}
}
